package com.wlyuan.open.controller;


import com.wlyuan.export.api.IExportTaskService;
import com.wlyuan.export.dto.*;
import com.wlyuan.export.vo.ExportTaskDetailVO;
import com.wlyuan.tools.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

/**
 * @author
 */
@Api(tags = "导出")
@RequestMapping("/api/export/task")
@RestController
public class OpenExportController {

    @DubboReference(check = false)
    private IExportTaskService exportTaskService;

    @ApiOperation("查询导出任务")
    @GetMapping("/{exportTaskId}")
    public ExportTaskDetailVO getExportTaskById(@PathVariable("exportTaskId") Long exportTaskId) {
        return exportTaskService.getExportTaskById(exportTaskId);
    }

    @ApiOperation("创建导出任务")
    @PostMapping("")
    public ExportTaskDetailVO export(@RequestBody ExportTaskCreationDTO creation) {
        return exportTaskService.export(creation);
    }

    @ApiOperation("重新执行导出")
    @PostMapping("/recall")
    public ExportTaskDetailVO recall(@RequestBody ExportTaskRecallDTO recall) {
        return exportTaskService.recall(recall);
    }

    @ApiOperation("导出任务列表")
    @PostMapping("/search")
    public Page<ExportTaskDetailVO> search(@RequestBody ExportTaskFilterDTO filter) {
        return exportTaskService.search(filter);
    }

    @ApiOperation("删除导出任务")
    @DeleteMapping("/{exportTaskId}")
    public void remove(@Valid @RequestBody ExportTaskDeleteDTO deleteDTO,
                       @PathVariable("exportTaskId") Long exportTaskId) {
        deleteDTO.setExportTaskId(exportTaskId);
        exportTaskService.remove(deleteDTO);
    }

    @ApiOperation("修改任务状态为已下载")
    @PutMapping("/update/taskStatus")
    public void updateTaskDownLoadStatus(@RequestBody ExportTaskUpdateDTO updateDTO) {
        exportTaskService.updateTaskDownLoadStatus(updateDTO);
    }

    @ApiOperation("统计导出总数")
    @PostMapping("/searchCount")
    public Long searchCount(@RequestBody ExportTaskCountDTO exportTaskCountDTO) {
        return exportTaskService.searchCount(exportTaskCountDTO);
    }
}
